package com.knowledgegraph.neo4j.service;

import com.knowledgegraph.neo4j.entity.GraphRelationship;

import java.util.List;
import java.util.Map;

/**
 * Neo4j 关系服务接口
 */
public interface Neo4jRelationshipService {
    
    /**
     * 创建关系
     */
    GraphRelationship createRelationship(Long startNodeId, Long endNodeId, String type, String description, Map<String, Object> properties, Long graphId);
    
    /**
     * 根据ID查询关系
     */
    GraphRelationship findById(Long id);
    
    /**
     * 根据图谱ID查询关系
     */
    List<GraphRelationship> findByGraphId(Long graphId);
    
    /**
     * 根据关系类型查询
     */
    List<GraphRelationship> findByType(String type);
    
    /**
     * 查询两个节点之间的关系
     */
    List<GraphRelationship> findBetweenNodes(Long startNodeId, Long endNodeId);
    
    /**
     * 更新关系
     */
    GraphRelationship updateRelationship(GraphRelationship relationship);
    
    /**
     * 删除关系
     */
    void deleteRelationship(Long id);
    
    /**
     * 删除图谱下的所有关系
     */
    void deleteByGraphId(Long graphId);
    
    /**
     * 统计图谱下的关系数量
     */
    Long countByGraphId(Long graphId);
    
    /**
     * 根据强度范围查询关系
     */
    List<GraphRelationship> findByStrengthBetween(Double minStrength, Double maxStrength);
    
    /**
     * 批量创建关系
     */
    List<GraphRelationship> batchCreateRelationships(List<GraphRelationship> relationships);
}